#include<iostream>
//case模拟
template<int N>
struct Case{};
template<>
struct Case<1>//特化
{
    static std::string value()
    {
        return "1";
    }
};
template<>
struct Case<2>//特化
{
    static std::string value()
    {
        return "2";
    }
};

//循环
template<int start,int end>
struct For
{
    static void value()
    {
        std::cout<<start<<std::endl;
        For<start+1,end>::value();//递归
    }
};
//偏特化
template<int end>
struct For<end,end>//循环终止
{
    static void value()
    {
       
    }
};
//枚举可以在编译期做加法
template<int N>
struct Data
{
    enum
    {
        result=Data<N-1>::result+Data<N-2>::result
    };
};
template<>
struct Data<1>
{
    enum
    {
        result=1
    };
};
template<>
struct Data<2>
{
    enum
    {
        result=1
    };
};



int main()
{
    std::cout<<Data<5>::result<<std::endl;
    return 0;
}